home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 November / PCWNOV08.iso / Software / Freeware / Mini Map Sidebar 0.3 / mini_map_sidebar-0.3.0-fx.xpi / chrome / content / geooverlay.js < prev    next >
Encoding:
Text File  |  2008-07-12  |  40.5 KB  |  1,204 lines

  1. const gPrefs = Components.classes["@mozilla.org/preferences-service;1"]
  2.     .getService(Components.interfaces.nsIPrefService)
  3.     .QueryInterface(Components.interfaces.nsIPrefBranch);
  4. const gmaps_Branch = gPrefs.getBranch("gmaps.");
  5.  
  6. var gsBundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
  7. var minimapstrings = gsBundle.createBundle("chrome://minimap/locale/maps.properties");
  8.  
  9. function $S(aID) {
  10.     return $("sidebar").contentDocument.getElementById(aID);
  11. }
  12.  
  13. window.addEventListener('load', gdgeourlInitff, false);
  14. window.addEventListener('load', sbViewMapInit, false);
  15. window.addEventListener("keydown", maploadKey, false);
  16.  
  17. function maploadKey(event){
  18. if (event.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey && event.keyCode == '77'){
  19. minimapPanel();
  20. }
  21. }
  22.  
  23.  
  24. function gdgeourlInitff(e) {
  25.     var contentArea = document.getElementById('content');
  26.     contentArea.addEventListener('select', gdgeourlChangeStateff, false);
  27.     contentArea.addEventListener('unload', gdgeourlChangeStateff, true);
  28.     contentArea.addEventListener('load', gdgeourlChangeStateff, true);
  29.     contentArea.addEventListener('load', gmapsMicro, true);
  30.  
  31. }
  32.  
  33. function sbViewMapInit()
  34. {
  35.     if (document.getElementById("contentAreaContextMenu"))
  36.     {
  37.         document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", sbOnViewMapPopup, false);
  38.  
  39.     }
  40. }
  41.  
  42.  
  43. function sbOnViewMapPopup(e)
  44. {
  45.     var msgA = minimapstrings.GetStringFromName("menuitem.a.locate");
  46.     var msgB = minimapstrings.GetStringFromName("menuitem.b.locate");
  47.     var msgC = minimapstrings.GetStringFromName("menuitem.sidebar.normal");
  48.     var msgD = minimapstrings.GetStringFromName("menuitem.maptab.normal");
  49.     document.getElementById("minimap-panel-link-context").hidden = (!gContextMenu.onLink);
  50.     document.getElementById("minimap-link-context").hidden = (!gContextMenu.onLink);
  51.     document.getElementById("maptab-link-context").hidden = (!gContextMenu.onLink);
  52.     document.getElementById("context-minimap-tab").hidden = (gContextMenu.onLink);
  53.     document.getElementById("context-minimap-sidebar").hidden = (gContextMenu.onLink);
  54.     document.getElementById("context-minimap-panel").hidden = (gContextMenu.onLink);
  55.  
  56.         var selectedText = getSelectedText();
  57.         var menuItem = document.getElementById("context-minimap-tab");
  58.         var menuItemB = document.getElementById("context-minimap-sidebar");
  59.         var menuItemC = document.getElementById("context-minimap-panel");
  60.         
  61.         if (selectedText != "")
  62.         {
  63.             menuItem.setAttribute('hidden','false');
  64.             menuItemB.setAttribute('hidden','false');
  65.             menuItemC.setAttribute('hidden','false');
  66.  
  67.         if (selectedText.length > 25)
  68.         {
  69.             selectedText = selectedText.substr(0, 21) + "...";
  70.         }
  71.  
  72.         menuItem.setAttribute("label", msgA +' "' + selectedText + '"');
  73.         menuItemB.setAttribute("label", msgB +' "' + selectedText + '"');
  74.         menuItemC.setAttribute("label", 'Map Preview: Locate' +' "' + selectedText + '"');
  75.         
  76.                 
  77.         mouseX = e.pageX;
  78.         mouseY = e.pageY;
  79.     }
  80.     else {
  81.         menuItem.setAttribute("label", msgD);
  82.         menuItemB.setAttribute("label", msgC);
  83.         menuItemC.setAttribute('label','Open Map Preview');
  84.         
  85.     }
  86. }
  87.  
  88. // Taken from the DictionarySearch extension by Jaap Haitsma <jaap@haitsma.org>
  89. function getSelectedText()
  90. {
  91.     var node = document.popupNode;
  92.     var selection = "";
  93.  
  94.     if ((node instanceof HTMLTextAreaElement) || (node instanceof HTMLInputElement && node.type == "text")) {
  95.         selection = node.value.substring(node.selectionStart, node.selectionEnd);
  96.     }
  97.     else {
  98.         var focusedWindow = new XPCNativeWrapper(document.commandDispatcher.focusedWindow, 'document', 'getSelection()');
  99.         selection = focusedWindow.getSelection().toString();
  100.     }
  101.  
  102.     // Addresses longer than 200 characters are probably bogus anyway...
  103.     if (selection.length > 200)
  104.     {
  105.         selection = selection.substring(0, 199);
  106.     }
  107.     
  108.     selection = selection.replace(/(\n|\r|\t|(\r\n))+/g, " ");
  109.  
  110.     // Strip spaces at start and end.
  111.     selection = selection.replace(/(^\s+)|(\s+$)/g, "");
  112.  
  113.     selection = selection.split(" ");
  114.         
  115.     // Remove certain characters at the beginning and end of every word
  116.     for (i = 0; i < selection.length; i++)
  117.     {
  118.         selection[i] = selection[i].replace(/^(\&|\(|\)|\[|\]|\{|\}|"|,|\.|!|\?|'|:|;)+/, "");
  119.         selection[i] = selection[i].replace(/(\&|\(|\)|\[|\]|\{|\}|"|,|\.|!|\?|'|:|;)+$/, "");
  120.     }
  121.     
  122.     selection = selection.join(" ");
  123.     
  124.     return selection;
  125. }
  126.  
  127. function gdgeourlChangeStateff() {
  128.     try{
  129.     gdgeourlBuildMenuff();
  130.     var regexp_clean = new RegExp('[^0-9;,.-]','g');
  131.     if (window.content) {
  132.         var geoarray = [];
  133.        var gcontent = window.content.document.getElementsByTagName('body')[0].textContent;
  134.         if (gcontent) {
  135.         latlong_re = /\bgeo:lat=([\-\d\.]+).*geo:lon=([\-\d\.]+)\b/;
  136.         var latlong = latlong_re.exec(gcontent);
  137.         var pos = 0;
  138.         while (latlong) {
  139.         $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  140.         $('geodiscovery-label').setAttribute('hidden','false');
  141.             if (latlong[1] && latlong[2]) { geoarray.push(latlong[1]+','+latlong[2]); }
  142.             pos += latlong.index + latlong[0].length;
  143.             latlong = latlong_re.exec(gcontent.substr(pos));
  144.         var x
  145.         for (x in geoarray)
  146.         {
  147.         var coords = geoarray.shift();
  148.         gdgeourlReBuildMenuff(coords)
  149.         }
  150.       }
  151.     }
  152.  
  153.       if (gcontent) {
  154.         latlong_re = /\bgeo:lon=([\-\d\.]+).*geo:lat=([\-\d\.]+)\b/;
  155.         var latlong = latlong_re.exec(gcontent);
  156.         var pos = 0;
  157.       while (latlong) {
  158.         $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  159.         $('geodiscovery-label').setAttribute('hidden','false');
  160.           if (latlong[1] && latlong[2]) { geoarray.push(latlong[2]+','+latlong[1]); }
  161.           pos += latlong.index + latlong[0].length;
  162.           latlong = latlong_re.exec(gcontent.substr(pos));
  163.         var x
  164.         for (x in geoarray)
  165.         {
  166.         var coords = geoarray.shift();
  167.         gdgeourlReBuildMenuff(coords)
  168.         }
  169.       }
  170.     }
  171.  
  172.       if (gcontent) {
  173.         latlong_re = /\bgeo:lat=([\-\d\.]+).*geo:long=([\-\d\.]+)\b/;
  174.         var latlong = latlong_re.exec(gcontent);
  175.         var pos = 0;
  176.       while (latlong) {
  177.         $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  178.         $('geodiscovery-label').setAttribute('hidden','false');
  179.             if (latlong[1] && latlong[2]) { geoarray.push(latlong[1]+','+latlong[2]); }
  180.             pos += latlong.index + latlong[0].length;
  181.             latlong = latlong_re.exec(gcontent.substr(pos));
  182.         var x
  183.         for (x in geoarray)
  184.         {
  185.         var coords = geoarray.shift();
  186.         gdgeourlReBuildMenuff(coords)
  187.         }
  188.         }
  189.       }
  190.  
  191.       if (gcontent) {
  192.         latlong_re = /\bgeo:long=([\-\d\.]+).*geo:lat=([\-\d\.]+)\b/;
  193.         var latlong = latlong_re.exec(gcontent);
  194.         var pos = 0;
  195.       while (latlong) {
  196.         $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  197.         $('geodiscovery-label').setAttribute('hidden','false');
  198.             if (latlong[1] && latlong[2]) { geoarray.push(latlong[2]+','+latlong[1]); }
  199.             pos += latlong.index + latlong[0].length;
  200.             latlong = latlong_re.exec(gcontent.substr(pos));
  201.         var x
  202.         for (x in geoarray)
  203.         {
  204.         var coords = geoarray.shift();
  205.         gdgeourlReBuildMenuff(coords)
  206.         }
  207.         }
  208.       }
  209.  
  210.     var metas = window.content.document.getElementsByTagName('meta');
  211.       if (metas) {
  212.         for (i=0; i < metas.length; i++) {
  213.         metas[i].name=metas[i].name.toLowerCase();
  214.             if ((metas[i].name=='icbm')||(metas[i].name=='geo.position')) {
  215.             $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  216.         $('geodiscovery-label').setAttribute('hidden','false');
  217.           var geourlvalue = metas[i].content;
  218.           geourlvalue = geourlvalue.replace(regexp_clean,'');
  219.           geourlvalue = geourlvalue.replace(';',',');
  220.           gdgeourlcodeff(geourlvalue);
  221.         }
  222.         }
  223.     }
  224.     }
  225. }catch(err){}
  226. }
  227.  
  228. function gdgeourlBuildMenuff() {
  229.     $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but_grey.png');
  230.         $('geodiscovery-label').setAttribute('hidden','true');
  231.     var geoMenu = $('geodiscoveryMenuPopup');
  232.     while (geoMenu.firstChild)
  233.         geoMenu.removeChild(geoMenu.firstChild);
  234. }
  235.  
  236. function gdgeourlReBuildMenuff(coords) {
  237.     var geoMenu = $('geodiscoveryMenuPopup');
  238.     var menuitem = document.createElement('menuitem');
  239.     menuitem.setAttribute('label','geoURL: '+coords);
  240.     menuitem.setAttribute('value',coords);
  241.     menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);');
  242.     geoMenu.appendChild(menuitem);
  243. }
  244.  
  245. function gdgeourlcodeff(geourlvalue) {
  246.     var geoMenu = $('geodiscoveryMenuPopup');
  247.     var menuitem = document.createElement('menuitem');
  248.     menuitem.setAttribute('label','geoURL: '+geourlvalue);
  249.     menuitem.setAttribute('value',geourlvalue);
  250.     menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);');
  251.     geoMenu.appendChild(menuitem);
  252. }
  253.  
  254. function gdgeourltimeoutff() {
  255.     setTimeout("gdgeourlChangeStateff()", 1000);
  256. }
  257.  
  258. function geodiscoveryOpen(address){
  259. if (address != ''){
  260.     gminibrowserScope = 'panel';
  261.         gAddress = encodeURIComponent(address);
  262.         gAddressB = address;
  263.         gTitle = content.document.title;
  264.         geoCode();
  265.         
  266.     }
  267. }
  268.  
  269. function testForLoadMapTabGeo(){
  270.     try{
  271.     var loadfunc = window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.webTestForLoad();
  272.     if (loadfunc == 'true'){
  273.     var lat = gLat;
  274.     var lng = gLng;
  275.     var title = gTitle;
  276.     var body = "<b>"+title+"</b><br />"+lat+","+lng;
  277.     window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.addItGeoDis(lat,lng,title,body);;
  278.     }
  279.     else{
  280.     setTimeout('testForLoadMapTabGeo()',100);        
  281.     }
  282.     }
  283.     catch(err){
  284.     setTimeout('testForLoadMapTabGeo()',100);
  285.     }
  286. }
  287.  
  288.  
  289.  
  290. function statusMapTab(){
  291.     var url = "chrome://minimap/content/maptab.xul";
  292.     var browser = window.getBrowser();
  293.     var tabs = browser.mTabs;
  294.     var index;
  295.     for (var i = 0; i < tabs.length; i++) {
  296.       if (tabs[i].linkedBrowser.currentURI.spec == url) {
  297.         index = i;
  298.       }
  299.     }
  300.     if (index) {
  301.       browser.selectedTab = tabs[index];
  302.     } else {
  303.       browser.selectedTab = browser.addTab(url);
  304.     }    
  305. }
  306.  
  307.  
  308. function minimapContextSidebar(){
  309.     address = getSelectedText();
  310.     gminibrowserScope = 'sidebar';
  311.     if ($('viewminimap').getAttribute('checked') != 'true'){
  312.         toggleSidebar('viewminimap');
  313.         gAddress = encodeURIComponent(address);
  314.       gAddressB = address;
  315.       gTitle = content.document.title;
  316.       setTimeout('geoCode()',100);
  317.         }
  318.         else{
  319.         gAddress = encodeURIComponent(address);
  320.         gAddressB = address;
  321.         gTitle = content.document.title;
  322.         geoCode();    
  323.         }
  324. }
  325.  
  326. function minimapContext(){
  327.     address = getSelectedText();
  328.     gminibrowserScope = 'maptab';
  329.     gAddress = encodeURIComponent(address);
  330.     gAddressB = address;
  331.     gTitle = content.document.title;
  332.     var url = "chrome://minimap/content/maptab.xul";
  333.     var browser = window.getBrowser();
  334.     var tabs = browser.mTabs;
  335.     var index;
  336.     for (var i = 0; i < tabs.length; i++) {
  337.       if (tabs[i].linkedBrowser.currentURI.spec == url) {
  338.         index = i;
  339.       }
  340.     }
  341.     if (index) {
  342.       browser.selectedTab = tabs[index];
  343.     } else {
  344.       browser.selectedTab = browser.addTab(url);
  345.     }
  346.     geoCode();
  347. }
  348.  
  349. function minimapPanel(){ 
  350.         address = getSelectedText();
  351.         if(!address)
  352.         var address = prompt('Preview Address','');
  353.         if(!address){}
  354.         else{
  355.         gminibrowserScope = 'panel';
  356.             gAddress = encodeURIComponent(address);
  357.             gAddressB = address;
  358.             gTitle = content.document.title;
  359.             geoCode();
  360.             
  361.         }        
  362. }
  363.  
  364.  
  365.  
  366.  
  367.  
  368. //const nsIRDFRemoteDataSource        = Components.interfaces.nsIRDFRemoteDataSource;
  369.  
  370.  
  371. var $ = function(x) { return  document.getElementById(x); };
  372.  
  373.  
  374. var gMapsDS = null;
  375. var gAddress = null;
  376. var gAddressB = null;
  377. var gTitle = null;
  378. var gLat = null;
  379. var gLng = null;
  380. var gminibrowserScope = null;
  381. var gmapsData = {};
  382. var gmapsId = null;
  383.  
  384. var gObserver = {
  385.     onAssert            : function(ds, source, predicate, target){
  386.  
  387.                           },
  388.     onUnassert          : function(ds, source, predicate, target){
  389.  
  390.                           },
  391.     onChange            : function(ds, source, predicate, oldTarget, newTarget){
  392.  
  393.                           },
  394.     onMove              : function(ds, oldSource, newSource, predicate, target){},
  395.     onBeginUpdateBatch  : function(ds){},
  396.     onEndUpdateBatch    : function(ds){}
  397. };
  398.  
  399.  
  400.  
  401.  
  402. // ################ end of global/common variables ####################
  403.  
  404.  
  405. // ##################### end of init / close code #############################
  406.  
  407. //********************** datasource code ******************************
  408.  
  409. function flock_mapsGetDS() {
  410.   var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService().QueryInterface(Components.interfaces.nsIRDFService);
  411.   var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  412.   var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile);
  413.  
  414.   if(!gMapsDS) {
  415.     // Create file object in the user's profile path.
  416.     var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  417.     file.initWithPath(profileDir.path);
  418.     file.append('flock_maps.rdf');
  419.     if(!file.exists()) file.createUnique(0,0700);
  420.       // Create the datasource and a sequence
  421.       gMapsDS = new RDFDataSource('file://'+file.path);
  422.       var root = gMapsDS.getNode("urn:flock:maps:addresses");
  423.       root.makeSeq();
  424.       var root = gMapsDS.getNode("urn:flock:maps:kml");
  425.       root.makeSeq();
  426.     }
  427.   return gMapsDS;
  428. }
  429.  
  430. function rebuild() {
  431.   var ds = flock_mapsGetDS();
  432.   var ui = document.getElementById('address_list');
  433.   ui.database.AddDataSource(ds.getRawDataSource());
  434.   ui.ref = "urn:flock:maps:addresses";
  435.   ui.builder.rebuild();
  436. }
  437.  
  438. function _mns(str) {
  439.   return "http://www.flock.com/rdf/maps#" + str;
  440. }
  441.  
  442. function addressCount(){
  443.   var ds = flock_mapsGetDS();
  444.   var root = ds.getNode("urn:flock:maps:addresses");
  445.   // Just using getChildCount() doesn't work for some reason. Too bad for now.
  446.   var cnt=0;
  447.   var children = root.getChildren();
  448.   while(children.hasMoreElements()){
  449.   children.getNext();
  450.   cnt++;
  451.   }
  452.   return cnt;
  453. }
  454.  
  455. function add_object(data){
  456.     try{
  457.         var ds = flock_mapsGetDS();
  458.         var container = ds.getNode("urn:flock:maps:addresses");
  459.         var date=new Date();
  460.         var id='obj_' + date.getTime();
  461.         var root = ds.getNode("urn:flock:maps:addresses");
  462.         var node = ds.getNode("urn:flock:maps:addresses:" + id);
  463.         node.addTargetOnce(_mns('id'), "urn:flock:maps:addresses:" + id );
  464.         node.addTargetOnce(_mns('sourceurl'), data.sourceurl + "" );
  465.         node.addTargetOnce(_mns('location'), data.address + "");
  466.         node.addTargetOnce(_mns('indexlabel'), data.indexlabel +"");
  467.         node.addTargetOnce(_mns('lat'), data.lat + "" );
  468.         node.addTargetOnce(_mns('lng'), data.lng + "" );
  469.         node.addTargetOnce(_mns('title'), data.title + "" );
  470.         node.addTargetOnce(_mns('description'), (data.description || "") );
  471.         node.addTargetOnce(_mns('accuracy'), data.accuracy + "" );
  472.         node.addTargetOnce(_mns('country'), (data.country || "") );
  473.         node.addTargetOnce(_mns('state'), (data.state || "") );
  474.         node.addTargetOnce(_mns('county'), (data.county || "") );
  475.         node.addTargetOnce(_mns('locality'), (data.locality || "") );
  476.         node.addTargetOnce(_mns('postal'), (data.postal || "") );
  477.         root.addChild(node);
  478.         ds.save(); 
  479.         gmapsId = id;
  480.     }
  481.     catch(e){
  482.     }
  483. }
  484.  
  485.  
  486.  
  487. function showSel(id){
  488.     aTree = document.getElementById('sidebar').contentWindow.$('address_list');
  489.     aCols = 'idCol';
  490.     var z = addressCount();
  491.     for (var i = 0; i < z; ++i) {
  492.     var col = aTree.columns.getNamedColumn(aCols);
  493.     var t = aTree.view.getCellText(i, col);
  494. if(id == t){
  495. //var boxobject = aTree.boxObject;
  496. //boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject);
  497. //boxobject.scrollToRow(i);
  498. aTree.view.selection.select(i);
  499. }
  500. }
  501. }
  502.  
  503. // ####################### end of main datasource code #########
  504.  
  505.  
  506.  
  507. // ******************* geocode code **********************
  508. // --------- google geocoder---------------------
  509.  
  510. function geoCode() {
  511.     var address = gAddress;
  512.     var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  513.     req = new XMLHttpRequest ();   
  514.     req.onreadystatechange = getMapsResponseG; 
  515.     req.open("GET","http://"+domain+"/maps/geo?q="+address+"&output=json&key=ABQIAAAAYgWXR5db6m93gnVrMsuXtxQncSHX4Q3-Ab3FozCaoQoCHwys1RTHg7pQTMlWwiL_zaU6tQ386P4zMw",true);
  516.     req.send(null);
  517. }
  518.  
  519. function getMapsResponseG(){
  520.   if (req.readyState == 4) { 
  521.     if (req.status == 200) 
  522.     { 
  523.     var results = JSON.parse(req.responseText);
  524.     var code = results.Status.code;
  525.     if (code == "200"){
  526.     if (results.Placemark.length == 1){
  527.     var placemark = results.Placemark[0];
  528.     var lat = placemark.Point.coordinates[1];
  529.     var lng = placemark.Point.coordinates[0];
  530.     var altd = placemark.Point.coordinates[2];
  531.     var accuracy = placemark.AddressDetails.Accuracy;
  532.     try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';};
  533.     try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';};
  534.     try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';};
  535.     try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';};
  536.     try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';}
  537.     try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';};
  538.     var data = {};
  539.     data.lat = lat;
  540.     data.lng = lng;
  541.     data.accuracy = accuracy;
  542.     data.address = gAddressB;
  543.     data.title = gTitle;
  544.     data.country = country;
  545.     data.state = state;
  546.     data.county = county;
  547.     data.locality = locality;
  548.     data.postal = postal;
  549.     data.street = street;
  550.     data.altd = altd;
  551.     try{
  552.     data.sourceurl = content.document.location;
  553.     if (data.sourceurl == "about:blank")
  554.     data.sourceurl = "";
  555.     }
  556.     catch(err){
  557.     data.sourceurl = "";
  558.     }
  559.     data.indexlabel = addressCount()+1;
  560.     data.indexlabel = data.indexlabel.toString();
  561. if(gminibrowserScope != 'panel'){    
  562. add_object(data); 
  563. }
  564.     gLat = lat;
  565.     gLng = lng;
  566.     if(gminibrowserScope == 'maptab'){
  567.     setTimeout('testForContextLoadMapTab()',100);
  568.     }
  569.     else if(gminibrowserScope == 'panel'){    
  570.         gmapsData = data;
  571.         openMapPanel();
  572.     }
  573.     else{
  574.     setTimeout('testForContextLoad()',100);
  575.     }
  576.     } // end one result if
  577.     else{
  578.         if(gminibrowserScope == 'maptab'){
  579.             var geoList = window.content.document.getElementById('multiaddress-list');
  580.             geoList.setAttribute('hidden',false);
  581.             var mapDeck = window.content.document.getElementById('maps-deck');
  582.             mapDeck.setAttribute('hidden',true);    
  583.         }
  584.         else if(gminibrowserScope == 'panel'){ 
  585.         openMapPanelList();
  586.         var geoList = document.getElementById('panel-multiaddress-list');
  587.         }
  588.         else{
  589.         var geoList = $S('multiaddress-list');
  590.         geoList.setAttribute('hidden',false);
  591.         var mapDeck = $S('maps-deck');
  592.         mapDeck.setAttribute('hidden',true);
  593.         }
  594.     for (var i = 0; i <= results.Placemark.length - 1; i++){
  595.     var placemark = results.Placemark[i];
  596.     var lat = placemark.Point.coordinates[1];
  597.     var lng = placemark.Point.coordinates[0];
  598.     var altd = placemark.Point.coordinates[2];
  599.     var accuracy = placemark.AddressDetails.Accuracy;
  600.     try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';};
  601.     try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';};
  602.     try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';};
  603.     try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';};
  604.     try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';};
  605.     try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';};
  606.     var structAdd = placemark.address;
  607.     try{
  608.     var url = content.document.location;
  609.     if (url == "about:blank")
  610.     url = "";
  611.     }
  612.     catch(err){
  613.     url = "";
  614.     }
  615.  
  616.     var coords = lat + ',' + lng;
  617.     var listitem = document.createElement('listitem');
  618.     listitem.setAttribute('label',structAdd);
  619.     listitem.setAttribute('value',coords);
  620.     listitem.setAttribute('title',structAdd);
  621.     listitem.setAttribute('accuracy',accuracy);
  622.     listitem.setAttribute('description','');
  623.     listitem.setAttribute('url',url);
  624.     listitem.setAttribute('country',country);
  625.     listitem.setAttribute('state',state);
  626.     listitem.setAttribute('county',county);
  627.     listitem.setAttribute('locality',locality);
  628.     listitem.setAttribute('postal',postal);
  629.     listitem.setAttribute('street',street);
  630.     listitem.setAttribute('altd',altd);
  631.     geoList.appendChild(listitem);
  632.     } // for
  633.     } // end more than one else
  634.     } // end code 200
  635.     if (code != "200"){ 
  636.     pipesGeoCode();
  637.     }
  638.    } 
  639.   } 
  640. }
  641.  
  642. // -------------- pipes json geocoder --------------------
  643.  
  644. function pipesGeoCode(){
  645.   var address = gAddress;
  646.   req = new XMLHttpRequest ();
  647.   req.onreadystatechange = getaddressPipesResponseG;
  648.   req.open("GET","http://pipes.yahoo.com/pipes/pipe.run?_id=qudHFl3z2xGTWsmGnkartA&_render=json&_run=1&location="+address,true);
  649.   req.send(null);
  650. }
  651.  
  652. function getaddressPipesResponseG(){
  653.  if (req.readyState == 4) {
  654.   if (req.status == 200)
  655.   {
  656.     var results = JSON.parse(req.responseText);
  657.     var resultset = results.value.items[0];
  658.     var lat = resultset.lat; //eg returns "56.575849"
  659.     var lng = resultset.lon; //eg returns "-3.231635"
  660.     var accuracy = resultset.quality; //eg returns "40"
  661.     try{var country = resultset.country;}catch(e){var country = '';}
  662.     try{var state = resultset.state;}catch(e){var state = '';}
  663.     try{var locality = resultset.city;}catch(e){var locality = '';}
  664.     try{var postal = resultset.postal;}catch(e){var postal = '';}
  665.     try{var street = resultset.street;}catch(e){var street = '';}
  666.     if (lat != ''){
  667.         var data = {};
  668.     data.lat = lat;
  669.     data.lng = lng;
  670.     data.accuracy = accuracy;
  671.     data.address = gAddressB;
  672.     data.title = gTitle;
  673.     data.country = country;
  674.     data.state = state;
  675.     data.locality = locality;
  676.     data.postal = postal;
  677.     try{
  678.     data.sourceurl = content.document.location;
  679.     if (data.sourceurl == "about:blank")
  680.     data.sourceurl = "";
  681.     }
  682.     catch(err){
  683.     data.sourceurl = "";
  684.     }
  685.     data.indexlabel = addressCount()+1;
  686.     data.indexlabel = data.indexlabel.toString();
  687.     if(gminibrowserScope != 'panel'){    
  688.     add_object(data); 
  689.     } 
  690.     gLat = lat;
  691.     gLng = lng;
  692.     if(gminibrowserScope == 'maptab'){
  693.     setTimeout('testForContextLoadMapTab()',100);
  694.     }
  695.     else if(gminibrowserScope == 'panel'){
  696.             gmapsData = data;
  697.             openMapPanel();
  698.     }
  699.     else{
  700.     setTimeout('testForContextLoad()',100);
  701.     }
  702.     }
  703.   }
  704.  else{
  705.  
  706.   }
  707.  }
  708. }
  709.  
  710. function testForContextLoad(){
  711.     if ($('viewminimap').getAttribute('checked') != 'true'){
  712.         toggleSidebar('viewminimap');
  713.     }
  714.     try{
  715.     var loadfuncside = document.getElementById('sidebar').contentWindow;
  716.       loadfuncside.rebuildMap( );
  717.     var loadfunc = loadfuncside.$('flock-maps-minibrowser').contentWindow.webTestForLoad();
  718.     if (loadfunc == 'true'){
  719.     var lat = gLat;
  720.     var lng = gLng;
  721.     var scope = document.getElementById('sidebar').contentWindow;
  722.     scope.$('flock-maps-minibrowser').contentWindow.gotoLatLng(lat,lng);
  723.     showSel('urn:flock:maps:addresses:'+gmapsId);
  724.     }
  725.     else{
  726.     setTimeout('testForContextLoad()',100);        
  727.     }
  728.     }
  729.     catch(err){
  730.     setTimeout('testForContextLoad()',100);
  731.     }
  732. }
  733.  
  734. function testForContextLoadMapTab(){
  735.     try{
  736.             var taburi = "chrome://minimap/content/maptab.xul";
  737.             var browser = window.getBrowser();
  738.             var tabs = browser.mTabs;
  739.             var index;
  740.             for (var i = 0; i < tabs.length; i++) {
  741.               if (tabs[i].linkedBrowser.currentURI.spec == taburi) {
  742.                 index = i;
  743.               }
  744.             }
  745.             if (index) {
  746.               browser.selectedTab = tabs[index];
  747.             } else {
  748.               browser.selectedTab = browser.addTab(taburi);
  749.             }
  750.     var loadfunc = window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.webTestForLoad();
  751.     if (loadfunc == 'true'){
  752.     var lat = gLat;
  753.     var lng = gLng;
  754.     window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.gotoLatLng(lat,lng);
  755.     }
  756.     else{
  757.     setTimeout('testForContextLoadMapTab()',100);        
  758.     }
  759.     }
  760.     catch(err){
  761.     setTimeout('testForContextLoadMapTab()',100);
  762.     }
  763. }
  764.  
  765. function addContextLink(scope){
  766.     var url;
  767.     try {
  768.         var url = gContextMenu.linkURL} // new FF, other?
  769.     catch(e) {
  770.     try {
  771.         var url = gContextMenu.linkURL()} // old FF, SM, other?
  772.     catch(e) {
  773.     var url = String(gContextMenu.link)} // either FF, other?
  774.     } 
  775.     gTitle = content.document.title;
  776.     gminibrowserScope = scope;
  777.     var datalabel = url;
  778.     //var geoUri = url.substr(0,4);
  779.     //if (geoUri == "geo:"){    
  780.     //}
  781.             if (datalabel.match('.kmz') || datalabel.match('.kml') || datalabel.match('=kml') || datalabel.match('bbs.keyhole.com') || datalabel.match('http://maps.google.com/maps/ms') || datalabel.match('.rss') || datalabel.match('.georss') || datalabel.match('=georss') || datalabel.match('=rss')){
  782.    if (scope != 'panel'){
  783.     var datalabel = datalabel.split(' ')[0];
  784.    contextAddXml(datalabel);
  785.     }
  786.     else{
  787.         alert('Unable to View KML/GeoRSS in Map Preview')
  788.     }
  789.    }
  790.             else if (datalabel.match('maps.google') || datalabel.match('maps.yahoo') || datalabel.match('maps.live') ){
  791.         datalabel = datalabel.split(' ')[0];
  792.         addressParse(datalabel);       
  793.         geoCode();
  794.     }
  795.    else{
  796.        gAddressB = datalabel;
  797.        addressParse(datalabel);       
  798.        geoCode();
  799.     }
  800. }
  801.  
  802. function addressParse(address) {
  803.   address = address.replace( /[\r\n>]/g, ' ' );
  804.   encodedAddress = encodeURI(address);
  805.   gAddress = encodedAddress;
  806.   if (encodedAddress.match('maps.live')) {
  807.       var query = encodedAddress;
  808.         var pairs = query.split("&");
  809.         for (var i=0; i<pairs.length; i++) {
  810.         var pos = pairs[i].indexOf("=");
  811.         var argname = pairs[i].substring(0,pos).toLowerCase();
  812.         var value = pairs[i].substring(pos+1);
  813.         if (argname == "where1") {var loc = value;}
  814.         if (argname == "cp") {var loc = value;}
  815.         }
  816.       loc = loc.replace(/~/gi,',');
  817.       encodedAddress = loc;
  818.       gAddress = encodedAddress;
  819.       gAddressB = encodedAddress;
  820.     }
  821.   if (encodedAddress.match('maps.yahoo')) {
  822.     if (encodedAddress.match('lat=')) {
  823.         var query = encodedAddress;
  824.         var pairs = query.split("&");
  825.         for (var i=0; i<pairs.length; i++) {
  826.         var pos = pairs[i].indexOf("=");
  827.         var argname = pairs[i].substring(0,pos).toLowerCase();
  828.         var value = pairs[i].substring(pos+1);
  829.         if (argname == "lat") {var lat = value;}
  830.         if (argname == "lon") {var lon = value;}
  831.       }
  832.       encodedAddress = lat + ',' + lon;
  833.       gAddress = encodedAddress;
  834.       gAddressB = encodedAddress;
  835.       }
  836.     else{
  837.       encodedAddress = encodedAddress.split('?addr=')[1];
  838.       encodedAddress = encodedAddress.split('%0A')[0];
  839.       encodedAddress = encodedAddress.replace( /\+at\+.*&csz=/gi, ', ');
  840.       encodedAddress = encodedAddress.replace( /&csz=/gi, ', ');
  841.       encodedAddress = encodedAddress.replace( /&country=/gi, ', ');
  842.       encodedAddress = encodedAddress.replace( /\+/g, ' ');
  843.       gAddress = encodedAddress;
  844.       gAddressB = encodedAddress;
  845.      } 
  846.   }
  847.   if (encodedAddress.match('maps.google')) {
  848.     encodedAddress = encodedAddress.replace(/loc%3A/,'') // sometimes there is a 'loc:' in the query
  849.     encodedAddress = encodedAddress.replace(/loc%/,'') // sometimes there is a 'loc:' in the query
  850.     encodedAddress = encodedAddress.replace(/253A/,'') // sometimes there is a '253A:' in the query
  851.  
  852.     if (encodedAddress.match('q=')){   
  853.     encodedAddress = encodedAddress.split('?q=')[1];
  854.     }
  855.     if (encodedAddress.match('addr=')){   
  856.     encodedAddress = encodedAddress.split('?addr=')[1];
  857.     }
  858.     if (encodedAddress.match('%0A')){
  859.     encodedAddress = encodedAddress.split('%0A')[0];
  860.     }
  861.     if (encodedAddress.match('%2540')){
  862.     encodedAddress = encodedAddress.split('%2540')[0];
  863.     }
  864.     if (encodedAddress.match(/\(/)){
  865.     encodedAddressb = encodedAddress.split('(')[0];
  866.     encodedAddressc = encodedAddress.split(')')[1];
  867.     encodedAddress = encodedAddressb+encodedAddressc;
  868.     }
  869.     if (encodedAddress.match('ll=')){   
  870.     encodedAddress = encodedAddress.split('?ll=')[1];
  871.     }
  872.     if (encodedAddress.match('spn=')){   
  873.     encodedAddress = encodedAddress.split('spn=')[0];
  874.     }
  875.     encodedAddress = encodedAddress.replace( /\+/g, ' ');
  876.     gAddress = encodedAddress;
  877.     gAddressB = encodedAddress;
  878.   }
  879. }
  880.  
  881. function contextAddXml(source){
  882.     var kml = {};
  883.     kml.title = gTitle;
  884.     kml.url = source;
  885.     kml.checked = true;
  886.     addContextGeoXmlData(kml);
  887. }
  888.  
  889. function addContextGeoXmlData(kml){
  890.             var ds = flock_mapsGetDS();
  891.             var container = ds.getNode("urn:flock:maps:kml");
  892.             var date=new Date();
  893.  
  894.             var id='obj_' + date.getTime();
  895.  
  896.             var root = ds.getNode("urn:flock:maps:kml");
  897.             var node = ds.getNode("urn:flock:maps:kml:" + id);
  898.  
  899.  
  900.  
  901.             node.addTargetOnce(_mns('id'), "urn:flock:maps:kml:" + id );
  902.             node.addTargetOnce(_mns('kmlurl'), kml.url + "" );
  903.             node.addTargetOnce(_mns('kmltitle'), kml.title + "" );
  904.             node.addTargetOnce(_mns('kmlchecked'), kml.checked + "" );
  905.             root.addChild(node);
  906.             ds.save(); 
  907.             if(gminibrowserScope == 'sidebar'){
  908.                 if ($('viewminimap').getAttribute('checked') != 'true'){
  909.                     toggleSidebar('viewminimap'); 
  910.                 }
  911.                 else{
  912.                     addContextGeoXmlLayers(true);
  913.                 }
  914.             }
  915.         else{
  916.         var taburi = "chrome://minimap/content/maptab.xul";
  917.         var browser = window.getBrowser();
  918.         var tabs = browser.mTabs;
  919.         var index;
  920.         for (var i = 0; i < tabs.length; i++) {
  921.           if (tabs[i].linkedBrowser.currentURI.spec == taburi) {
  922.             index = i;
  923.           }
  924.         }
  925.         if (index) {
  926.           browser.selectedTab = tabs[index];
  927.         setTimeout('addContextGeoXmlLayers(true)',100); 
  928.         } else {
  929.           browser.selectedTab = browser.addTab(taburi);
  930.         }
  931.         }
  932. }
  933.  
  934. function addContextGeoXmlLayers(zoom){
  935.     if(gminibrowserScope == 'sidebar'){
  936.         var kmlMenu = $S('kml-list');
  937.         while (kmlMenu.firstChild){
  938.         kmlMenu.removeChild(kmlMenu.firstChild);
  939.         }
  940.         $S('flock-maps-minibrowser').contentWindow.clearGeoXml();
  941.         }
  942.     else{
  943.             var kmlMenu = window.content.document.getElementById('kml-list');
  944.             while (kmlMenu.firstChild){
  945.             kmlMenu.removeChild(kmlMenu.firstChild);
  946.             }
  947.             window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.clearGeoXml();    
  948.         }
  949.     var ds = flock_mapsGetDS();
  950.       var container = ds.getNode("urn:flock:maps:kml");
  951.       var nodes = container.getChildren();
  952.       while ( nodes.hasMoreElements() ) {
  953.     var node = nodes.getNext(); 
  954.     var source = "";
  955.     var checked = "";
  956.     var id ="";
  957.     var title = "";
  958.     if (node.getTarget(_mns('id')))
  959.         id = node.getTarget(_mns('id')).getValue();
  960.     if (node.getTarget(_mns('kmlurl')))
  961.         source = node.getTarget(_mns('kmlurl')).getValue();
  962.     if (node.getTarget(_mns('kmltitle')))
  963.             title = node.getTarget(_mns('kmltitle')).getValue();
  964.     if (node.getTarget(_mns('kmlchecked')))
  965.             checked = node.getTarget(_mns('kmlchecked')).getValue();
  966.         if(gminibrowserScope == 'sidebar'){
  967.    $S('flock-maps-minibrowser').contentWindow.addGeoXML(source,checked);
  968.     }
  969.     if(gminibrowserScope == 'maptab'){
  970.         window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.addGeoXML(source,checked);
  971.     }
  972.    // add richlistbox items
  973.     var menuitem = document.createElement('richlistitem');
  974.     menuitem.setAttribute('id',id);
  975.         menuitem.setAttribute('value',source);
  976.     menuitem.setAttribute('style','overflow: hidden');
  977.         menuitem.setAttribute('onclick','webGotoXmlViewport(this)');
  978.     var checkbox = document.createElement('checkbox');
  979.     checkbox.setAttribute('id',id);
  980.     checkbox.setAttribute('value',source);
  981.     checkbox.setAttribute('checked',checked);
  982.     checkbox.setAttribute('onclick','kmlListDo(this)');
  983.     menuitem.appendChild(checkbox);
  984.     var label = document.createElement('label');
  985.     label.setAttribute('value',title);
  986.     menuitem.appendChild(label);
  987.     kmlMenu.appendChild(menuitem);
  988.    }
  989.  
  990.     if (zoom){
  991.     var lastitem = kmlMenu.lastChild;
  992.     var theid = lastitem.getAttribute('value');
  993.     if(gminibrowserScope == 'sidebar'){
  994.      minimapBrowserScope().gotoXmlViewport(theid);
  995.     }
  996.     if(gminibrowserScope == 'maptab'){
  997.     window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.gotoXmlViewport(theid);
  998.     }
  999.     }
  1000. }
  1001.  
  1002.  
  1003. function multiAddressAddPanel(coords){
  1004.     var geoList = $('panel-multiaddress-list');
  1005.     var title = geoList.selectedItem.getAttribute('title');
  1006.     var url = geoList.selectedItem.getAttribute('url');
  1007.     var description = geoList.selectedItem.getAttribute('description');
  1008.     var accuracy = geoList.selectedItem.getAttribute('accuracy');
  1009.     var country = geoList.selectedItem.getAttribute('country');
  1010.     var state = geoList.selectedItem.getAttribute('state');
  1011.     var county = geoList.selectedItem.getAttribute('county');
  1012.     var locality = geoList.selectedItem.getAttribute('locality');
  1013.     var postal = geoList.selectedItem.getAttribute('postal');
  1014.     var street = geoList.selectedItem.getAttribute('street');
  1015.     var altd = geoList.selectedItem.getAttribute('altd');
  1016.     var lat = coords.split(',')[0];
  1017.     var lng = coords.split(',')[1];
  1018.     var data = {};
  1019.     data.lat = lat;
  1020.     data.lng = lng;
  1021.     data.altd = altd;
  1022.     data.accuracy = accuracy;
  1023.     data.address = geoList.selectedItem.label;
  1024.     data.title = title;
  1025.     data.sourceurl = url;
  1026.     data.description = description;
  1027.     data.country = country;
  1028.     data.state = state;
  1029.     data.county = county;
  1030.     data.locality = locality;
  1031.     data.postal = postal;
  1032.     data.street = street;
  1033.     data.indexlabel = addressCount()+1;
  1034.     data.indexlabel = data.indexlabel.toString();
  1035.     gmapsData = data;
  1036.     gLat = lat;
  1037.     gLng = lng;
  1038.     var geoList = document.getElementById('panel-multiaddress-list');
  1039.     while (geoList.firstChild)
  1040.         geoList.removeChild(geoList.firstChild);
  1041.     var panel = document.getElementById('addresslistpanel');
  1042.     panel.hidePopup();
  1043.     openMapPanel();
  1044.  
  1045. }
  1046.  
  1047. function openAddressServicePanel(service){
  1048.   var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew");
  1049.   var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  1050.   var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain");
  1051.  
  1052.   var nodelat = gmapsData.lat;
  1053.   var nodelng = gmapsData.lng;
  1054.   var nodeurl = gmapsData.sourceurl;
  1055.   var nodetitle = gmapsData.title;
  1056.   var nodeaddress = gmapsData.address;
  1057.   var nodedescription = gmapsData.description;
  1058.   var url = switchService(service,domain,ydomain,startaddress,nodelat,nodelng,nodeurl,nodetitle,nodeaddress,nodedescription);
  1059.   var newTab = window.getBrowser().addTab(url);
  1060.   window.getBrowser().selectedTab = newTab;
  1061. }
  1062.  
  1063. function openMapPanel(){
  1064.     
  1065.     var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  1066.     var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile);
  1067.     pathway = "file://"+profileDir.path+"/flock_maps.rdf";
  1068.     pathway = pathway.replace(/ /g,'%20');
  1069.     $('mappanel-from-list').setAttribute('datasources',pathway);
  1070.     $('mappanel-from-list').setAttribute('ref','urn:flock:maps:addresses');
  1071.     $('mappanel-to-list').setAttribute('datasources',pathway);
  1072.     $('mappanel-to-list').setAttribute('ref','urn:flock:maps:addresses');
  1073.         var panel = document.getElementById('mappanel');
  1074.         var mmimage = document.getElementById('mappanelimage');
  1075.                 var url = "http://maps.google.com/staticmap?center="+gLat+","+gLng+"&zoom=13&size=400x300&markers="+gLat+","+gLng+",blue&key=ABQIAAAAYgWXR5db6m93gnVrMsuXtxQncSHX4Q3-Ab3FozCaoQoCHwys1RTHg7pQTMlWwiL_zaU6tQ386P4zMw";
  1076.         mmimage.setAttribute('src',url);
  1077.             try{
  1078.                         panel.hidden = false;
  1079.         panel.openPopupAtScreen(screen.availLeft + (screen.availWidth - 460) / 2,
  1080.                                      screen.availTop + (screen.availHeight - 360) / 2,
  1081.                                      false);
  1082.  
  1083.  
  1084.         var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew");
  1085.         document.getElementById('mappanel-from').setAttribute('value', startaddress);
  1086.         document.getElementById('mappanel-to').setAttribute('value', gmapsData.address);
  1087.         }
  1088.         catch(e){
  1089.                     panel.hidden = true;
  1090.             alert('Preview Panel requires Firefox 3');
  1091.         }
  1092.                                 
  1093.  
  1094.         
  1095. }
  1096.  
  1097. function openMapPanelList(){
  1098.         var panel = document.getElementById('addresslistpanel');
  1099.     try{
  1100.             panel.hidden = false;
  1101.     panel.openPopupAtScreen(screen.availLeft + (screen.availWidth - 460) / 2,
  1102.                                  screen.availTop + (screen.availHeight - 360) / 2,
  1103.                                  false);    
  1104.  
  1105.     }
  1106.     catch(e){
  1107.         panel.hidden = true;
  1108.         alert('Preview Panel requires Firefox 3');
  1109.     }
  1110. }
  1111.  
  1112. function panelAddressSwitch(){
  1113.     var from = document.getElementById('mappanel-from').value;
  1114.     var to = document.getElementById('mappanel-to').value;
  1115.     document.getElementById('mappanel-from').setAttribute('value', to);
  1116.     document.getElementById('mappanel-to').setAttribute('value', from);
  1117. }
  1118.  
  1119. function panelAddressDirections(service){
  1120.     var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  1121.     var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain");
  1122.     var directionsFrom = document.getElementById('mappanel-from').value;
  1123.     var directionsTo = document.getElementById('mappanel-to').value;
  1124.     var url = service;
  1125.     switch (url) {
  1126.       case "google":
  1127.         url = "http://"+domain+"/maps?saddr="+directionsFrom+"&daddr="+directionsTo;
  1128.       break;
  1129.       case "yahoo":
  1130.         url = "http://"+ydomain+"/dd?taddr="+directionsTo+"&addr="+directionsFrom;
  1131.       break;
  1132.       case "microsoft":
  1133.         url = "http://local.live.com/default.aspx?rtp=adr."+directionsFrom+"~adr."+directionsTo;    
  1134.       break;
  1135.     }
  1136.   var newTab = window.getBrowser().addTab(url);
  1137.   window.getBrowser().selectedTab = newTab;
  1138.     
  1139. }
  1140.  
  1141. function panelAddAddress(){
  1142.     document.getElementById('addAddressPanel').setAttribute('image','chrome://minimap/skin/accept.png');
  1143.         add_object(gmapsData);    
  1144. }
  1145.  
  1146. function mappanelFromReplaceAddress(address){
  1147.     $('mappanel-from').setAttribute('value', address);
  1148. }
  1149.  
  1150. function mappanelToReplaceAddress(address){
  1151.     $('mappanel-to').setAttribute('value', address);
  1152. }
  1153.  
  1154. function mappanelHidden(){
  1155.     document.getElementById('addAddressPanel').removeAttribute('image');
  1156. }
  1157.  
  1158. function openSidebarFromPanel(scope){
  1159.     add_object(gmapsData);
  1160.     var panel = document.getElementById('mappanel');
  1161.     panel.hidePopup();
  1162.         if(scope == 'maptab'){
  1163.         setTimeout('testForContextLoadMapTab()',100);
  1164.         }
  1165.         else{
  1166.         setTimeout('testForContextLoad()',100);
  1167.         }
  1168. }
  1169.  
  1170.  
  1171. Components.utils.import("resource://gre/modules/Microformats.js");
  1172.  
  1173. function gmapsMicro(){
  1174.     var gmapsMicroformatsArray = Microformats.get('adr', content.document);
  1175.     for (i = 0; i < gmapsMicroformatsArray.length; i++)
  1176.     {
  1177.     gmapsMicroBuildMenu(gmapsMicroformatsArray[i]);    
  1178.     }
  1179.     if (gmapsMicroformatsArray.length != 0){
  1180.     $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  1181.     $('geodiscovery-label').setAttribute('hidden','false');
  1182.     }
  1183.     var gmapsMicroformatsArrayGeo = Microformats.get('geo', content.document);
  1184.     if (gmapsMicroformatsArrayGeo.length != 0){
  1185.     for (i = 0; i < gmapsMicroformatsArrayGeo.length; i++)
  1186.     {
  1187.     gmapsMicroBuildMenu(gmapsMicroformatsArrayGeo[i]);    
  1188.     }
  1189.     $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png');
  1190.     $('geodiscovery-label').setAttribute('hidden','false');
  1191.     }
  1192. }
  1193.  
  1194. function gmapsMicroBuildMenu(geourlvalue) {
  1195.     var geoMenu = $('geodiscoveryMenuPopup');
  1196.     var menuitem = document.createElement('menuitem');
  1197.     menuitem.setAttribute('label','uF: '+geourlvalue);
  1198.     menuitem.setAttribute('value',geourlvalue);
  1199.     menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);');
  1200.     geoMenu.appendChild(menuitem);
  1201. }
  1202.  
  1203. function mapsPopupShown(){
  1204. }